#include<iostream>
#include<cstdio>
#include<vector>
#include<unistd.h>
#include<pthread.h>

void *thread_routine(void*args)
{
    std::string threadname=static_cast<const char*>(args);
    while(true)
    {

        printf("new thread is running,name is: %s, new thread id is:0x%lx\n",threadname.c_str(),pthread_self());
        sleep(1);
        // pthread_cancel(pthread_self());
        break;
    }
    // return nullptr;
    // exit(10);
    pthread_exit((void*)20);
    // return (void*)10;
}

int main()
{
    pthread_t tid;
    int n=pthread_create(&tid,nullptr,thread_routine,(void*)"thread-1");
    (void)n;

    printf("mainthread creat done, main thread is:0x%lx,new thread id:0x%lx\n",pthread_self(),tid);
    
    sleep(2);
    // printf("cancel target thread\n");

    void* reval;
    int m=pthread_join(tid,&reval);
    (void)m;
    if(m==0)
    {
        printf("new thread return val:%lld\n",( long long)reval);
    }

    sleep(3);
    printf("main end...,m is:%d\n",m);

    return 0;
}

// volatile int gval=100;
// int* data=nullptr;

// std::string func()
// {
//     return "我是另一个函数";
// }

// void *thread_routine(void*args)
// {
//     std::string threadname=static_cast<const char*>(args);
//     // data=new int(10);
//     int cnt=10;
//     while(true)
//     {
//         // printf("new thread...:gval: %d, &gval: %p, %s, data:%p, %d\n",gval,&gval,func().c_str(),data,*data);
//         // gval++;
//         printf("new thread is running,name is: %s\n",threadname.c_str());
//         cnt--;
//         if(cnt==3)
//         {
//             printf("%s is dead...\n",threadname.c_str());
//             int *p=nullptr;
//             *p=0;
//         }
//         sleep(1);
//     }
//     return nullptr;
// }

// int gnum=10;

// int main()
// {
//     std::vector<pthread_t> tids;
//     for(int i=0;i<gnum;i++)
//     {
//         pthread_t tid;
//         // char idbuffer[64];
//         char *p=new char[64];
//         snprintf(p,64,"thread-%d",i+1);
//         int n=pthread_create(&tid,nullptr,thread_routine,(void*)p);
//         (void)n;

//         tids.push_back(tid);
//     }

//     sleep(1);
//     for(auto&tid:tids)
//     {
//          printf("main create a new thread, new thread id is:0x%lx\n",tid);
//     }

//     for(auto&tid:tids)
//     {
//         pthread_join(tid,nullptr);
//         printf("thread end...,退出的线程是:0x%lx\n",tid);
//     }
//     printf("main end...\n");

    
//     // sleep(1);
//     //主线程
//     // sleep(2);
//     // while(true)
//     // {
//     //     printf("main thread...:gval: %d, &gval: %p, %s, data:%p, %d\n",gval,&gval,func().c_str(),data,*data);
//     //     sleep(1);
//     // }
//     return 0;
// }